package com.sz.common.core.service;

import org.apache.shiro.session.Session;

import java.util.Map;

/**
 * Function: PrincipalManager <br>
 * Author: Charles <br>
 * Date: 2017-01-20 13:33:00
 */
public interface PrincipalManager extends PrincipalListener {
    /**
     * 读取当前会话的principal对象实例
     *
     * @return
     */
    Principal getPrincipal();

    /**
     * 从指定session中获取principal对象实例
     *
     * @param session
     * @return
     */
    Principal getPrincipal(Session session);

    /**
     * 创建匿名用户
     *
     * @return
     */
    Principal createAnonymousPrincipal();

    /**
     * 创建用户
     *
     * @param appDomain   --域Id
     * @param accountId   --账户Id
     * @param accountName --账户名称
     * @param props       --其它属性
     * @return
     */
    Principal setupPrincipal(int appDomain, int accountId, String accountName, Map<String, Object> props);

    /**
     * 是否支持匿名用户
     *
     * @return
     */
    default boolean isAnonymousSupported() {
        return false;
    }
}
